package tesis.util;

import tesis.dto.base.BaseRemoteOutBean;

import java.io.StringWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import tesis.dto.in.*;
import tesis.dto.out.FormDTO;


public class MotorInvoker extends Invoker {

    public static BaseRemoteOutBean test(String urlService, ObjetoParametro objeto) {
        BaseRemoteOutBean result = null;
        try {
            JAXBContext c = JAXBContext.newInstance(new Class[]{ObjetoParametro.class});
            StringWriter stringWriter = new StringWriter();
            Marshaller marshaller = c.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_ENCODING, DEFAULT_CHARACTER_ENCODING);
            marshaller.marshal(objeto, stringWriter);
            result = getResultBean(urlService+"/test", stringWriter.toString(), BaseRemoteOutBean.class);
        } catch (Exception ex) {
            Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE, null, ex);
            result = new BaseRemoteOutBean();
            result.setError(true);
            result.setMensaje("Ocurrio un error en la invocacion");
        }
        return result;
    }

    public static BaseRemoteOutBean test2(String urlService, String  objeto) {
        BaseRemoteOutBean result = null;
        try {
            result = getResultBean(urlService+"/test2?objeto="+objeto, BaseRemoteOutBean.class);
        } catch (Exception ex) {
            Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE, null, ex);
            result = new BaseRemoteOutBean();
            result.setError(true);
            result.setMensaje("Ocurrio un error en la invocacion");
        }
        return result;
    }

  

    
    
    
    public static EstacionDTO getStationByName(String urlService, String name){
        EstacionDTO bean = new EstacionDTO();
        try{
            bean = getResultBean(urlService+"/getStation?nameStation="+name, EstacionDTO.class);
        }catch(RuntimeException ex){
            Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE, null, ex);

        }
        
        return bean;
        
        
        
    }
    
    
    public static EstacionDTO getStationByName(Integer idProceso ,String urlService, String name){
        EstacionDTO bean = new EstacionDTO();
        try{
            bean = getResultBean(urlService+"/getStation?idProceso="+idProceso+"&nameStation="+name, EstacionDTO.class);
        }catch(RuntimeException ex){
            Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE, null, ex);

        }
        
        return bean;
        
        
        
    }
    
    
     public static ListVariables getVars(String urlService, Integer idInstancia){
        ListVariables bean = new ListVariables();
        try{
            bean = getResultBean(urlService+"/getVars?codeStation="+idInstancia, ListVariables.class);
        }catch(RuntimeException ex){
            Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE, null, ex);

        }
        
        return bean;
        
        
        
    }
     
     
     public static ListVariables getVarsInput(String urlService, Integer idInstancia){
        ListVariables bean = new ListVariables();
        try{
            bean = getResultBean(urlService+"/getVarsInput?codeStation="+idInstancia, ListVariables.class);
        }catch(RuntimeException ex){
            Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE, null, ex);

        }
        
        return bean;

    }
    
     public static ListVariables getVarsOutPut(String urlService, Integer idInstancia){
        ListVariables bean = new ListVariables();
        try{
            bean = getResultBean(urlService+"/getVarsOutput?codeStation="+idInstancia, ListVariables.class);
        }catch(RuntimeException ex){
            Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE, null, ex);

        }
        
        return bean;

    }
     
        
     public static ListTipoDocumento getTipoDocumento(String urlService, Integer idInstancia){
        ListTipoDocumento bean = new ListTipoDocumento();
        try{
            bean = getResultBean(urlService+"/getTypeDocuments?codeStation="+idInstancia, ListTipoDocumento.class);
        }catch(RuntimeException ex){
            Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE, null, ex);

        }
        
        return bean;
        
        
        
    } 
     
     
    public static ListTipoDocumento getTypeDocumentsOutput(String urlService, Integer idInstancia){
        ListTipoDocumento bean = new ListTipoDocumento();
        try{
            bean = getResultBean(urlService+"/getTypeDocumentsOutput?codeStation="+idInstancia, ListTipoDocumento.class);
        }catch(RuntimeException ex){
            Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE, null, ex);

        }
        
        return bean;
   
    } 
    
    
     public static ListTipoDocumento getTypeDocumentsInput(String urlService, Integer idInstancia){
        ListTipoDocumento bean = new ListTipoDocumento();
        try{
            bean = getResultBean(urlService+"/getTypeDocumentsInput?codeStation="+idInstancia, ListTipoDocumento.class);
        }catch(RuntimeException ex){
            Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE, null, ex);

        }
        
        return bean;
   
    } 
    
//    public static UsuarioRest getCiudadanoPorId(String urlService, Integer id) {
//        UsuarioRest result = null;
//        try {
//            result = getResultBean(urlService+"/ciudadanoById?id="+id, UsuarioRest.class);
//        } catch (Exception ex) {
//            Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE, null, ex);
//            result = new UsuarioRest();
//            result.setError(true);
//            result.setMensaje("Ocurrio un error en la invocacion");
//        }
//        return result;
//    }
//
//    public static UsuarioRest getCiudadano(String urlService, String loginUserName) {
//        UsuarioRest result = null;
//        try {
//            result = getResultBean(urlService+"/ciudadano?loginUserName="+loginUserName, UsuarioRest.class);
//        } catch (Exception ex) {
//            Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE, null, ex);
//            result = new UsuarioRest();
//            result.setError(true);
//            result.setMensaje("Ocurrio un error en la invocacion");
//        }
//        return result;
//    }
//
//    public static ListCiudadanoDTO getCiudadanoPorNombresApellidos(String urlService, String nombres, String apellidoPaterno,  String apellidoMaterno) {
//        ListCiudadanoDTO result = null;
//        try {
//            result = getResultBean(urlService+"/ciudadanoNombresApellidos?nombres="+nombres+"&apellidoPaterno="+apellidoPaterno+"&apellidoMaterno="+apellidoMaterno, ListCiudadanoDTO.class);
//        } catch (Exception ex) {
//            Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE, null, ex);
//            result = new ListCiudadanoDTO();
//            result.setError(true);
//            result.setMensaje("Ocurrio un error en la invocacion");
//        }
//        return result;
//    }
//
//    public static ListCiudadanoDTO getCiudadanoPorDniNombre(String urlService, FiltroBusquedaDenunciantesDTO filtro) {
//        ListCiudadanoDTO result = null;
//        try {
//            JAXBContext c = JAXBContext.newInstance(new Class[]{FiltroBusquedaDenunciantesDTO.class});
//            StringWriter stringWriter = new StringWriter();
//            Marshaller marshaller = c.createMarshaller();
//            marshaller.setProperty(Marshaller.JAXB_ENCODING, DEFAULT_CHARACTER_ENCODING);
//            marshaller.marshal(filtro, stringWriter);
//            result = getResultBean(urlService+"/ciudadanoDniNombre", stringWriter.toString(), ListCiudadanoDTO.class);
//        } catch (Exception ex) {
//            Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE, null, ex);
//            result = new ListCiudadanoDTO();
//            result.setError(true);
//            result.setMensaje("Ocurrio un error en la invocacion");
//        }
//        return result;
//    }
//
//    public static ListEmpresaDTO getEmpresaPorRucRazonSocial(String urlService, FiltroBusquedaDenunciantesEmpresaDTO filtro) {
//        ListEmpresaDTO result = null;
//        try {
//            JAXBContext c = JAXBContext.newInstance(new Class[]{FiltroBusquedaDenunciantesEmpresaDTO.class});
//            StringWriter stringWriter = new StringWriter();
//            Marshaller marshaller = c.createMarshaller();
//            marshaller.setProperty(Marshaller.JAXB_ENCODING, DEFAULT_CHARACTER_ENCODING);
//            marshaller.marshal(filtro, stringWriter);
//            result = getResultBean(urlService+"/empresaRucRazonSocial", stringWriter.toString(), ListEmpresaDTO.class);
//        } catch (Exception ex) {
//            Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE, null, ex);
//            result = new ListEmpresaDTO();
//            result.setError(true);
//            result.setMensaje("Ocurrio un error en la invocacion");
//        }
//        return result;
//    }

    public static BaseRemoteOutBean recuperarPassword(String urlService, String mail) {
        BaseRemoteOutBean result = null;
        try {
            result = getResultBean(urlService+"/recuperarPassword?mail="+mail, BaseRemoteOutBean.class);
        } catch (Exception ex) {
            Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE, null, ex);
            result = new BaseRemoteOutBean();
            result.setError(true);
            result.setMensaje("Ocurrio un error en la invocacion");
        }
        return result;
    }
    
    public static ProcesoDTO saveProceso(String url,ProcesoDTO procesoDTO){
        ProcesoDTO result = null;
        try {
            JAXBContext c = JAXBContext.newInstance(new Class[]{ProcesoDTO.class});
            StringWriter stringWriter = new StringWriter();
            Marshaller marshaller = c.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_ENCODING, DEFAULT_CHARACTER_ENCODING);
            marshaller.marshal(procesoDTO, stringWriter);
            result = getResultBean(url+"/saveProceso", stringWriter.toString(), ProcesoDTO.class);
        } catch (Exception ex) {
            Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE, null, ex);
            result = new ProcesoDTO();
            result.setError(true);
            result.setMensaje("Ocurrio un error en la invocacion: "+ex);
        }
        return result;
    }

    
     public static InstanciaProcesoDTO getInstanciaProceso(String urlService, Integer  idInstanciaProceso) {
        InstanciaProcesoDTO result = null;
        try {
            result = getResultBean(urlService+"/getInstanceProcessById?idProcessInstance="+idInstanciaProceso, InstanciaProcesoDTO.class);
        } catch (Exception ex) {
            Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE, null, ex);
            result = new InstanciaProcesoDTO();
            result.setError(true);
            result.setMensaje("Ocurrio un error en la invocacion"); 
        }
        return result;
    }
     
     public static ListInstanciaEstacionDTO getInstanciaEstacion(String urlService,AplicacionClienteDTO aplicacionCliente){
         ListInstanciaEstacionDTO result = null;
         try{
             
             JAXBContext c = JAXBContext.newInstance(new Class[]{AplicacionClienteDTO.class});
             StringWriter stringWriter = new StringWriter();
             Marshaller marshaller = c.createMarshaller();
             marshaller.setProperty(Marshaller.JAXB_ENCODING, DEFAULT_CHARACTER_ENCODING);
             marshaller.marshal(aplicacionCliente, stringWriter);
             result = getResultBean(urlService + "/getInstanceStationbyUser", stringWriter.toString(),ListInstanciaEstacionDTO.class);
         
        }catch(Exception ex){
             Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE,null,ex);
             result = new ListInstanciaEstacionDTO();
             result.setError(true);
             result.setMensaje("Ocurrio un error en la invocacion: " + ex);
         }
         return result;
         
     }
     
     public static ListEstadoInstanciaEstacionDTO getEstadoInstanciaEstacionDTO(String urlService){
         ListEstadoInstanciaEstacionDTO result = new ListEstadoInstanciaEstacionDTO();
         try{
             result = getResultBean(urlService + "/getStateInstanceStation",  ListEstadoInstanciaEstacionDTO.class);
             
             
         }catch(Exception ex){
             Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE,null,ex);
             result.setError(true);
             result.setMensaje("Ocurrio un error en la invocacion: " + ex);
         }
         
         return result;
                 
     }
     
     
     public static ListProcesoDTO getProcesosAsignadoByUser(String urlService, AplicacionClienteDTO aplicacionCliente){
         ListProcesoDTO  result = new ListProcesoDTO();
         try{
             result = getResultBean(urlService +  "/getAssignProcessUser?idUser=" + aplicacionCliente.getIdUsuarioDTO()+"&inicio="+aplicacionCliente.getInicio()+"&fin="+aplicacionCliente.getUltimo(), ListProcesoDTO.class);
             
         }catch(RuntimeException ex){
             Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE,null,ex);
             result.setError(true);
             result.setMensaje("Ocurrio un error en la invocacion: " + ex);
         }
         return result;
     }
     
     public static InstanciaEstacionDTO getInstanciaEstacion(String urlService,Integer  idinstanciaestacion){
         InstanciaEstacionDTO result = null;
         
         try{
             result = getResultBean(urlService + "/getInstanceStation?codeInstanceStation=" + idinstanciaestacion, InstanciaEstacionDTO.class);
         }catch(RuntimeException ex){
             Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE,null,ex);
             result.setError(true);
             result.setMensaje("Ocurrio un error en la invocacion: " + ex);
         }
         
         return result;
     }
     
     public static InstanciaEstacionDTO getPrimeraInstanciaEstacion(String urlService,Integer idProceso){
         InstanciaEstacionDTO result = null;
         try{
             result = getResultBean(urlService + "/getFirstInstanceStation?idProceso=" + idProceso, InstanciaEstacionDTO.class);
         }catch(RuntimeException ex){
             Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE,null,ex);
             result.setError(true);
             result.setMensaje("Ocurrio un error en la invocacion: " + ex);
         }
         
         
         
         return result;
     }
     
     
     public static ExecuteStationDTO ejecutarEstacion(String urlService, ExecuteStationDTO execute ){
          ExecuteStationDTO result = null;
         try{      
            
             
             JAXBContext c = JAXBContext.newInstance(new Class[]{ExecuteStationDTO.class});
             StringWriter stringWriter = new StringWriter();
             Marshaller marshaller = c.createMarshaller();
             marshaller.setProperty(Marshaller.JAXB_ENCODING, DEFAULT_CHARACTER_ENCODING);
             marshaller.marshal(execute, stringWriter);
             result = getResultBean(urlService + "/executeStation", stringWriter.toString(),ExecuteStationDTO.class);
 
         }catch(Exception ex){
                     Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE,null,ex);
      
         }
         
         return result;
     }
     
     
     public static FormDTO getVariablesForm(String urlService,Integer idEstacion){
         FormDTO result = null;
         try{
             result = getResultBean(urlService + "/getVariablesForm?idEstacion=" + idEstacion, FormDTO.class);
         }catch(RuntimeException ex){
             Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE,null,ex);
             result.setError(true);
             result.setMensaje("Ocurrio un error en la invocacion: " + ex);
         }
         return result;
     }

     public static MapaSincronizadoDTO getMapaById(String urlService,Integer idMapa){
         MapaSincronizadoDTO result = null;
         try{
             result = getResultBean(urlService + "/getMapaById?id=" + idMapa, MapaSincronizadoDTO.class);
         }catch(RuntimeException ex){
             Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE,null,ex);
             result.setError(true);
             result.setMensaje("Ocurrio un error en la invocacion: " + ex);
         }
         return result;
     }
     
     
     public static FormDTO getValoresParametros(String urlService,Integer idInstanciaProceso){
         FormDTO result = null;
         try{
             result = getResultBean(urlService + "/getValoresParametros?idInstanciaProceso=" + idInstanciaProceso, FormDTO.class);
         }catch(RuntimeException ex){
             Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE,null,ex);
             result.setError(true);
             result.setMensaje("Ocurrio un error en la invocacion: " + ex);
         }
         return result;
     }

     
     
      public static FormDTO getValoresEstacionAnterior(String urlService,Integer idInstanciaProceso,Integer idInstanciaEstacionActual){
         FormDTO result = null;
         try{
             result = getResultBean(urlService + "/getValoresEstacionAnterior?idInstanciaProceso=" + idInstanciaProceso+"&idInstanciaEstacionActual="+idInstanciaEstacionActual, FormDTO.class);
         }catch(RuntimeException ex){
             Logger.getLogger(MotorInvoker.class.getName()).log(Level.SEVERE,null,ex);
             result.setError(true);
             result.setMensaje("Ocurrio un error en la invocacion: " + ex);
         }
         return result;
     }
}
